var express = require('express');
var router = express.Router();
const db=require('../db/db');
var sd = require('silly-datetime');
const common=require('../lib/common')
const Token=require('../lib/token')

function cuttingtime(str) {
    str = str.split(" ")[1]
    str = str.split(":")[0]
    if (str.charAt(0) == '0') {
        str = str.charAt(1)
        return str
    } else {
        return str
    }
}

//管理员登录
router.post('/adLogin',function (req,res) {
    const {username,password}=req.body;
    if (username==null||password==null){
        res.send({flag:false,msg:'用户或密码不能为空'});
        return;
    }else if (username.trim()==""||password.trim()==""){
        res.send({flag:false,msg:'用户或密码不能为空'});
        return;
    }
    let sql=`select * from admin where user=?`;
    db.query(sql,username,function (err,result) {
        if (err){
            console.log('查询出错：'+err);
            res.send({flag:false,msg:'用户或密码不能为空'});
            return;
        }else{
            if (result.length==0){
                res.send({flag:false,msg:'账号不存在'});
            }else if(result[0].pass.toLocaleUpperCase()!=common.md5(password).toLocaleUpperCase()){
                res.send({flag:false,msg:'密码错误'});
            }else{
                let tokenKey = Token.createToken2(result[0].user)
                res.send({
                    flag:true,
                    msg:'登录成功',
                    token:"Bearer "+tokenKey
                });
            }
        }
    })
});

// 获取用户名
router.post('/decodeUsername', (req, res)=>{
    const token=String(req.headers.authorization).split(' ').pop()
    let data = Token.decode(token)
    if (data.status=='failed'){
        res.send({flag:false,msg:data.msg})
    }else {
        res.json({
            username:data.data
        })
    }
})

// 获取所有待上架商品
router.post('/getShopBynotAudit', function(req, r, next) {
    let {pageIndex,pageSize,status,classify}=req.body
    if (status==null||classify==null){
        r.send({flag:false,msg:'获取失败'});
        return;
    }
    if (pageIndex==null||pageSize==null){
        r.send({flag:false,msg:'获取失败'});
        return;
    }else if (pageIndex.trim()==""||pageSize.trim()==""){
        r.send({flag:false,msg:'获取失败'});
        return;
    }
    pageIndex=parseInt(pageIndex);
    pageSize=parseInt(pageSize);
    let sql=""
    if (status=="审核中"){
        status="audit"
    }else if (status=="审核成功"){
        status="success"
    }else if (status=="审核失败"){
        status="refushed"
    }
    if (classify=="所有"){
        if (status=="已上架"){
            sql=`select * from shop where  nft_id is not null order by id desc limit ?,?`;
        }else {
            sql=`select * from shop where status ='${status}' order by id desc limit ?,?`;
        }
    }else {
        if (status=="已上架"){
            sql=`select * from shop where classify='${classify}'  and nft_id is not null order by id desc limit ?,?`;
        }else {
            sql=`select * from shop where classify='${classify}' and status ='${status}' order by id desc limit ?,?`;
        }
    }
    let pos=(pageIndex-1)*pageSize;
    db.query(sql,[pos,pageSize],function (err,result) {
        if(err){
            console.log(err);
            r.send({flag:false,msg:'获取失败'});
            return;
        }else{
            if (result.length<1){
                r.send({flag:false,msg:'获取失败'});
                return;
            }
            if (classify=="所有"){
                if (status=="已上架"){
                    sql=`select count(id) as sum from shop where  nft_id is not null `;
                }else {
                    sql=`select count(id) as sum from shop where status ='${status}'`;
                }
            }else {
                if (status=="已上架"){
                    sql=`select count(id) as sum from shop where classify='${classify}'  and nft_id is not null `;
                }else {
                    sql=`select count(id) as sum from shop where classify='${classify}' and status ='${status}' `;
                }
            }
            db.query(sql,function (err,re) {
                if(err){
                    console.log(err);
                    r.send({flag:false,msg:'获取失败'});
                    return;
                }else {
                    if (result.length<1){
                        res.send({flag:false,msg:'获取失败'});
                        return;
                    }
                    r.json({data:result,count:re[0].sum})
                }
            })
        }
    })
});

//管理员同意上架
router.post('/setSuccess', function(req, res, next) {
    let {id}=req.body
    let sql=`update shop set status='success' where id=?`;
    db.query(sql,id,function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'获取失败'});
            return;
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'数据错误'});
                return;
            }
            res.send({flag:true,msg:'审核成功'});
        }
    })
});

//检查是否有相同作品
router.post('/checkSamework', function(req, res, next) {
    let {id}=req.body
    let shop_hash=""
    let sql=`select * from shop where id=?`;
    db.query(sql,[id],function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'获取失败'});
            return;
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'获取失败'});
                return;
            }
            sql=`select * from shop where shop_hash=? and id !=?`
            db.query(sql,[result[0].shop_hash,id],function (err,result) {
                if(err){
                    console.log(err);
                    res.send({flag:false,msg:'获取失败'});
                    return;
                }else{
                    if (result.length<1){
                        res.send({flag:true,msg:'检验合格'});
                    }else {
                        res.send({flag:false,msg:'有相同作品'});
                    }
                }
            })
        }
    })
});

//不同意上架 给予理由
router.post('/setRefused', function(req, res, next) {
    let {id,content}=req.body
    if (content.trim()==null){
        res.send({flag:false,msg:"必须给用户理由"})
        return;
    }else if (content.trim()==""){
        res.send({flag:false,msg:"必须给用户理由"})
        return;
    }
    let sql=`update shop set status='refushed' where id=?`;
    db.query(sql,id,function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'获取失败'});
            return;
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'更改失败'});
                return;
            }
            sql=`select * from reason where shop_id=?`
            db.query(sql,[id],function (err,result) {
                if(err){
                    console.log(err);
                    res.send({flag:false,msg:'获取失败'});
                    return;
                }else{
                    if (result.length>0){
                        sql=`update reason set reason=? where id=?`
                        db.query(sql,[content,result[0].id],function (err,result) {
                            if(err){
                                console.log(err);
                                res.send({flag:false,msg:'获取失败'});
                                return;
                            }else{
                                if (result.length<1){
                                    res.send({flag:false,msg:'数据错误'});
                                    return;
                                }
                                res.send({flag:true,msg:'拒绝成功'});
                            }
                        })
                    }else {
                        sql='insert into reason(shop_id,reason) values(?,?)'
                        db.query(sql,[id,content],function (err,result) {
                            if(err){
                                console.log(err);
                                res.send({flag:false,msg:'获取失败'});
                                return;
                            }else{
                                if (result.length<1){
                                    res.send({flag:false,msg:'数据错误'});
                                    return;
                                }
                                res.send({flag:true,msg:'拒绝成功'});
                            }
                        })
                    }
                }
            })
        }
    })
});

// 管理员审核商品访问信息
router.post('/getShopDetail', function(req, res, next) {
    const {id}=req.body
    let sql="select * from shop  where id=?"
    db.query(sql,id,function (err,result) {
        if (err){
            console.log(err)
            res.send({flag:false,msg:'获取失败'});
            return
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'获取失败'});
                return;
            }
            res.json(result)
        }
    })
});

//添加拍卖会
router.post('/addAuction', function(req, res, next) {
    let {starttime,endtime}=req.body
    if (starttime==null||endtime==null){
        res.send({flag:false,msg:'结束时间和开始时间不能为空'});
        return;
    }else if (starttime.trim()==""||endtime.trim()==""){
        res.send({flag:false,msg:'结束时间和开始时间不能为空'});
        return;
    }
    let startTime2 = new Date(new Date(new Date(starttime).toLocaleDateString()).getTime()); // 当天0点
    let endTime2 = new Date(new Date(new Date(starttime).toLocaleDateString()).getTime() +24 * 60 * 60 * 1000 -1);// 当天23:59
    startTime2=sd.format(new Date(startTime2), 'YYYY-MM-DD HH:mm:ss')
    endTime2=sd.format(new Date(endTime2), 'YYYY-MM-DD HH:mm:ss')
    let status='ready'
    if (starttime>endTime2||endtime>endTime2){
        res.send({flag:false,msg:'拍卖时间必须在同一天之内'});
        return
    }
    var s1 = starttime.replace(new RegExp("-","gm"),"/");
    s1 = (new Date(s1)).getTime();
    var s2 = endtime.replace(new RegExp("-","gm"),"/");
    s2 = (new Date(s2)).getTime();
    var s3=sd.format(new Date(), 'YYYY-MM-DD HH:mm:ss')
    s3=s3.replace(new RegExp("-","gm"),"/");
    s3 = (new Date(s3)).getTime();
    if (s1<s3||s2<s3){
        res.send({flag:false,msg:'开始时间和结束时间不能小于现在时间'});
        return
    } else if (s2<s1){
        res.send({flag:false,msg:'开始时间不能大于结束时间'});
        return;
    }else if (s2-s1>86400000) {
        res.send({flag:false,msg:'拍卖时间不能大于1天'});
        return
    }
    var s=cuttingtime(starttime)
    var e=cuttingtime(endtime)
    let title=s+"点~"+e+"点"
    let sql="insert into auction(title,starttime,endtime,status) values(?,?,?,?)"
    db.query(sql,[title,starttime,endtime,status],function (err,result) {
        if (err){
            console.log(err)
            res.send({flag:false,msg:'获取失败'});
            return
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'添加失败'});
                return;
            }
            res.send({flag:true,msg:'添加成功'});
        }
    })
});

//删除拍卖会
router.post('/delAuction', function(req, res, next) {
    let {ids}=req.body
    if (ids==""||ids==null){
        res.send({flag:false,msg:'没有选择删除的拍卖会'});
        return
    }
    let sql="delete from  auction where id in("+ids+")"
    db.query(sql,[ids],function (err,result) {
        if (err){
            console.log(err)
            res.send({flag:false,msg:'删除失败'});
            return
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'删除失败'});
                return;
            }
            res.send({flag:true,msg:'删除成功'});
        }
    })
});

//更改拍卖会
router.post('/updateAuction', function(req, res, next) {
    let {id,starttime,endtime,status}=req.body
    if (id==null||starttime==null||endtime==null||status==null){
        res.send({flag:false,msg:'修改信息不能为空'});
        return
    }else if (id.trim()==null||starttime.trim()==null||endtime.trim()==null||status.trim()==null){
        res.send({flag:false,msg:'修改信息不能为空'});
        return
    }
    if (status!='ready'){
        res.send({flag:false,msg:'该拍卖会已经不是准备状态，不能更改'});
        return
    }
    if (starttime==null||endtime==null){
        res.send({flag:false,msg:'结束时间和开始时间不能为空'});
        return;
    }else if (starttime.trim()==""||endtime.trim()==""){
        res.send({flag:false,msg:'结束时间和开始时间不能为空'});
        return;
    }
    let startTime2 = new Date(new Date(new Date(starttime).toLocaleDateString()).getTime()); // 当天0点
    let endTime2 = new Date(new Date(new Date(starttime).toLocaleDateString()).getTime() +24 * 60 * 60 * 1000 -1);// 当天23:59
    startTime2=sd.format(new Date(startTime2), 'YYYY-MM-DD HH:mm:ss')
    endTime2=sd.format(new Date(endTime2), 'YYYY-MM-DD HH:mm:ss')
    if (starttime>endTime2||endtime>endTime2){
        res.send({flag:false,msg:'拍卖时间必须在同一天之内'});
        return
    }
    var s1 = starttime.replace(new RegExp("-","gm"),"/");
    s1 = (new Date(s1)).getTime();
    var s2 = endtime.replace(new RegExp("-","gm"),"/");
    s2 = (new Date(s2)).getTime();
    var s3=sd.format(new Date(), 'YYYY-MM-DD HH:mm:ss')
    s3=s3.replace(new RegExp("-","gm"),"/");
    s3 = (new Date(s3)).getTime();
    if (s1<s3||s2<s3){
        res.send({flag:false,msg:'开始时间和结束时间不能小于现在时间'});
        return
    } else if (s2<s1){
        res.send({flag:false,msg:'开始时间不能大于结束时间'});
        return;
    }else if (s2-s1>86400000) {
        res.send({flag:false,msg:'拍卖时间不能大于1天'});
        return
    }
    var s=cuttingtime(starttime)
    var e=cuttingtime(endtime)
    let title=s+"点~"+e+"点"
    let sql="update auction set starttime=?,status=?,endtime=?,title=? where id=?"
    db.query(sql,[starttime,status,endtime,title,id],function (err,result) {
        if (err){
            console.log(err)
            res.send({flag:false,msg:'更改失败'});
            return
        }else{
            if (result.length<1){
                res.send({flag:false,msg:'更改失败'});
                return;
            }
            res.send({flag:true,msg:'更改成功'});
        }
    })
});

// 展示所有拍卖会
router.post('/queryAuction', function(req, res, next) {
    let {pageIndex,pageSize}=req.body
    if (pageIndex==null||pageSize==null){
        res.send({flag:false,msg:'获取失败'});
        return;
    }else if (pageIndex.trim()==""||pageSize.trim()==""){
        res.send({flag:false,msg:'获取失败'});
        return;
    }
    pageIndex=parseInt(pageIndex);
    pageSize=parseInt(pageSize);
    let sql=`select * from auction order by starttime desc limit ?,?`;
    let pos=(pageIndex-1)*pageSize;
    db.query(sql,[pos,pageSize],function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'获取失败'});
            return;
        }else{
            //最开始可以没有
            sql =`select count(id) as sum from auction`
            db.query(sql,function (err,re) {
                if(err){
                    console.log(err);
                    return;
                }else {
                    res.json({data:result,count:re[0].sum})
                }
            })
        }
    })
});

// 用户信息管理
router.post('/queryUsers', function(req, res, next) {
    let {pageIndex,pageSize}=req.body
    if (pageIndex==null||pageSize==null){
        res.send({flag:false,msg:'获取失败'});
        return;
    }else if (pageIndex.trim()==""||pageSize.trim()==""){
        res.send({flag:false,msg:'获取失败'});
        return;
    }
    pageIndex=parseInt(pageIndex);
    pageSize=parseInt(pageSize);
    let sql=`select * from user order by id desc limit ?,?`;
    let pos=(pageIndex-1)*pageSize;
    db.query(sql,[pos,pageSize],function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'获取失败'});
            return;
        }else{
            //最开始时可以没有
            sql =`select count(id) as sum from user`
            db.query(sql,function (err,re) {
                if(err){
                    console.log(err);
                    return;
                }else {
                    res.json({data:result,count:re[0].sum})
                }
            })
        }
    })
});

// 修改用户信息
router.post('/updateUser', function(req, res, next) {
    let {introduction,logo,user_address,username,background,password,nickname}=req.body
    if (introduction==null||logo==null||user_address==null||username==null||background==null||password==null||nickname==null){
        res.send({flag:false,msg:'信息不能为空'});
        return
    }else if (introduction.trim()==null||logo.trim()==null||user_address.trim()==null||username.trim()==null||background.trim()==null||password.trim()==null||nickname.trim()==null){
        res.send({flag:false,msg:'信息不能为空'});
        return
    }
    let sql=`select * from user where username = ? and user_address != ?`
    db.query(sql,[username,user_address],function (err,result) {
        if(err){
            console.log(err);
            res.send({flag:false,msg:'添加失败'});
            return;
        }else{
            if (result.length>0){
                res.send({flag:false,msg:'该用户名已经存在'});
                return;
            }else {
                sql=`select * from user where username = ? and user_address != ?`
                db.query(sql,[nickname,user_address],function (err,result) {
                    if (err) {
                        console.log(err);
                        res.send({flag: false, msg: '添加失败'});
                        return;
                    } else {
                        if (result.length > 0) {
                            res.send({flag: false, msg: '该昵称已经存在'});
                            return;
                        } else {
                            sql="update user set introduction=?,logo=?,username=?,background=?,password=?,nickname=? where user_address=?";
                            db.query(sql,[introduction,logo,username,background,common.md5(password),nickname,user_address],function (err,result) {
                                if(err){
                                    console.log(err);
                                    res.send({flag:false,msg:'添加失败'});
                                    return;
                                }else{
                                    if (result.length<1){
                                        res.send({flag:false,msg:'修改个人信息失败'});
                                    }
                                    res.send({flag:true,msg:'修改个人信息成功'});
                                }
                            })
                        }
                    }
                })
            }
        }
    })
})

module.exports = router;